package sort;

/**
 * 冒泡排序
 * (1)对数组中的各数据，依次比较相邻的两个元素的大小。
 * (2)如果前面的数据大于后面的数据，就交换两个数据。经过第一轮多次比较排序后便可把最小的数据排好.
 * (3)再用同样的方法把剩下的数据逐个进行比较，最后便可按照从小到大的顺序排号数组各数据的顺序
 */
public class BubbleSort {
	public static void main(String[] args) {
		bubbleSort(new int[]{5,4,3});
	}
	/**
	 * 冒泡排序
	 * 排序规则:从小到大
	 *
	 * @param a 需要排序的数组
	 */
	public static void bubbleSort(int[] a){
		int temp;
		//5 4 3
		//4 5 3
		//4 5 3
		//4 3 5
		//3 4 4

		//考虑最坏情况，从小到大排序如果最大值在最前面的顺序依次排列则每次只能把一个值传递到最后
		//所以除了第一位可以留一个小一点的数字后面的所有比第一个大的数字都要冒泡找一遍
		for(int i=1;i<a.length;i++){
			for(int j=0;j<a.length-i;j++){//从第一个数字开始一直到倒数第二个数字每个数字都要跟它后面的数字进行比较
				if(a[j]>a[j+1]){//如果前面的数大于后面的得交换一下
					temp = a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			}
			System.out.println("第"+i+"步排序结果:");
			for(int k=0;k<a.length;k++){
				System.out.println(" "+a[k]);
			}
			System.out.println("\n");
		}
	}
}
